package cn.lcsjsxy.yxc.objectoriented.包装类;

import org.junit.Test;

import static java.lang.Boolean.parseBoolean;
import static java.lang.Integer.parseInt;

/**
 * 包装类的使用：
 * 1.Java提供了8种基本数据类型对应的包装类，使得基本数据类型的变量具有类的特征
 * 2.掌握：基本数据类型、com.yang_xc.objectoriented.包装类、String三者之间的互相转换
 */
public class WrapperTest {

    /**
     * 基本数据类型-->com.yang_xc.objectoriented.包装类
     */
    @Test
    public void test1() {
        int num1 = 10;

        Integer in1 = Integer.valueOf(num1);  //这个是官方推荐的用来替代new Integer的
        System.out.println(in1.toString());

        Integer in2 = new Integer("123");  //这里要数字才行。虽然会给你标红，但是好像不影响使用，有一说一，有点神金
        System.out.println(in2.toString());

        Integer in3 = 50;  //自动装箱，比较智能，听弹幕说是最新写法，IDEA也推荐这么写（憋不住笑了，三写法）
        System.out.println(in3.toString());

        Float f1 = 1.0f;  //反正，写法改了，笑死了
        Float f2 = Float.valueOf("123f");  //填String形参的话还得这么写，或者用new那个
        System.out.println(f2.toString());

        Boolean b1 = true;
        Boolean b2 = new Boolean("1true111");//不是标准的true不行，为false
        System.out.println(b1);
        System.out.println(b2);

        Person p1 = new Person();
        System.out.println(p1.isFlag);
        System.out.println(p1.isFemale);  //高贵的类！！！null
    }

    /**
     * com.yang_xc.objectoriented.包装类--》基本数据类型:调用包装类的xxxValue()
     */
    @Test
    public void test2() {
        Integer in1 = 12;
        int i1 = in1.intValue();  //i1就是基本数据类型
        System.out.println(i1 + 1);

        Float f1 = 12.0f;
        float f2 = f1.floatValue();
        System.out.println(f2 + 3.0);
    }

    /**
     * 自动装拆箱
     */
    @Test
    public void test3() {
//        int num1=10;
//        Integer in1=num1;
//        method(in1);
//        System.out.println(in1);
        //自动装箱
        int num2 = 10;
        Integer in1 = num2;
        //自动拆箱
        int num3 = num2;
    }

    public void method(Object obj) {
    }
    /**
     * 基本数据类型、com.yang_xc.objectoriented.包装类---》String类型:调用String重载的valueOf（Xxx，xxx）
     */
    @Test
    public void test4(){
        int num1=10;
        //方式1：连接运算
        String str1= num1+"";  //连接个字符串就行
        System.out.println(str1);
        //方式2：
        float f1=12.3f;
        String str2=String.valueOf(f1);
        System.out.println(str2);

        Double d1=new Double(22.22);
        String str3=String.valueOf(d1);
        System.out.println(str3);
        str3=f1+"";
        System.out.println(str3);
    }
    /**
     * String类型---》基本数据类型、com.yang_xc.objectoriented.包装类：调用包装类的parseXxx（）
     */
    @Test
    public void test5(){
        String str1="123";
        //错误情况
//        int num1=(int)str1;
//        Integer in1=(Integer) str1;  强转得有子父类关系
        int num1=Integer.parseInt(str1);  //pareInt前的Integer能省,但是得导个包，在java.lang里
        System.out.println(num1+1);

        String str2="true";
        Boolean isFlag=parseBoolean(str2);
        System.out.println(isFlag);
    }
}

class Person {
    boolean isFlag;
    Boolean isFemale;
}
